package com.arch.dev.client;

import java.util.Date;
import java.util.List;
import java.util.Set;

import com.arch.dev.client.vo.BudgetVO;
import com.arch.dev.client.vo.CatagoryVO;
import com.arch.dev.client.vo.MonthVO;
import com.arch.dev.client.vo.PdfVO;
import com.arch.dev.client.vo.UserVO;
import com.arch.dev.client.vo.YearVO;
import com.google.gwt.user.client.rpc.AsyncCallback;

/**
 * The async counterpart of <code>GreetingService</code>.
 */
public interface GreetingServiceAsync {

	void getAllValues(AsyncCallback<List<BudgetVO>> callback);

	void persistValues(BudgetVO budgetVO, AsyncCallback<Void> callback);

	void getAllCatagories(AsyncCallback<List<CatagoryVO>> callback);

	void deleteValues(Set<BudgetVO> budgetVOs, AsyncCallback callback);

	void getMonthlyConsolidatedData(List<BudgetVO> budgetVOs,
			AsyncCallback<List<BudgetVO>> callback);

	void getMonthlyDataForYear(int year, int month, boolean isConsolidated, 
			AsyncCallback<List<BudgetVO>> callback);

	void getDateData(AsyncCallback<Set<YearVO>> callback);

	void generatePDF(AsyncCallback<PdfVO> callback);

	void getAllPDFValues(AsyncCallback<List<PdfVO>> callback);

	void getDataForDate(Date selectedDate,
			AsyncCallback<List<BudgetVO>> callback);

	void getYearlyData(int year, boolean isConsolidated,  AsyncCallback<List<BudgetVO>> callback);

	void savePDF(PdfVO pdfVO, AsyncCallback<PdfVO> callback);

	void deletePDF(Set<PdfVO> pdfVOs, AsyncCallback callback);

	void persistCatagoryValues(CatagoryVO catagoryVO,
			AsyncCallback<Void> callback);

	void deleteCatagoryValues(Set<CatagoryVO> catagoryVOs,
			AsyncCallback<Void> callback);
	
	void processDataFromExcel(String excelFileName, AsyncCallback callback);

	void getAllUserValues(AsyncCallback<List<UserVO>> callback);

	void persistUserValues(UserVO userVO, AsyncCallback<Void> callback);
	
	void deleteUserValues(Set<UserVO> userVOs, AsyncCallback<Void> callback);
	
	void getCatagoryWiseDataForMonth(int year, int month, boolean isConsolidated, AsyncCallback<List<BudgetVO>> callback);
	
	void getMonthlyCatagoryWiseDataForYear(int year, List<MonthVO> monthVOList, boolean isConsolidated, AsyncCallback<List<List<BudgetVO>>> callback);
}
